home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Plus Special 16
/
AMIGAplus Sonderheft 16 (1998)(ICP)(DE)[!].iso
/
pd
/
anwendungen
/
dcf77
/
developer
/
dcf77-datenaustausch
next >
Wrap
Text File
|
1998-07-30
|
4KB
|
93 lines
DCF77: Wie man den Status des Empfangsprogramms erfahren kann
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Damit andere Programme ermitteln können, ob DCF77 die Systemzeit
erfolgreich eingestellt hat, besitzt das Programm eine Datenstruktur, die
eine öffentliche SignalSemaphore zur Regelung des Zugriffs enthält.
Zum Zugriff auf die Struktur gelten die Regeln für die Benutzung von
Public Shared SignalSemaphoren. Es sollte nur lesend zugegriffen werden.
Die Semaphore ist unter dem Namen "DCF77 State" zu finden.
struct DCF77StateList
{
struct SignalSemaphore sl_Semaphore; // die Semaphore "DCF77 State"
STRPTR Version; // Zeiger auf die Version von DCF77 (z.B. "1.74")
BOOL Received; // FALSE: keine DCF77-Zeit | TRUE: Systemzeit gestellt.
// Die nachfolgenden Werte existieren erst ab DCF77 Version 2.18:
LONG ReceiverState; // 0 - kein Signal. 1 - Empfang gestört.
// 2 - Warte auf Synchronisation. 3 - Empfang läuft.
// 4 - Programm inaktiv
LONG TimeLeft; // voraussichtl. Dauer [s] bis zum nächsten Stellen
// der Zeit
LONG LastError; // noch nicht implementiert (z.Z. immer Null)
};
Als Beispiel zur Benutzung der Struktur finden Sie in diesem Verzeichnis
die Sourcecodes der Hilfsprogramme WaitForDCF77 und WaitDCF77ifCrash.
Bei der Weiterentwicklung des Programms ist eine Ergänzung der Struktur
um weitere Angaben möglich.
Genaueres über Semaphoren finden Sie ab Seite 509 in
Amiga ROM Kernel Reference Manual: Libraries, Third Edition
Addison-Wesley Publishing Company, Inc. 1992
ISBN 0-201-56774-1
Wenn die Versionsnummer von DCF77 abgefragt werden soll, kann das z.B.
auf folgende Weise geschehen:
struct DCF77StateList *DCF77PublicState;
UBYTE *DCF77SemaphoreName="DCF77 State";
LONG DCFVersion, DCFRevision, Characters;
Forbid();
if(DCF77PublicState=(struct DCF77StateList *) FindSemaphore(DCF77SemaphoreName))
{
ObtainSemaphoreShared((struct SignalSemaphore *) DCF77PublicState);
// Jetzt kann auf die bis Version 2.17 vorhandenen Werte zugegriffen
// werden...
Characters=StrToLong(DCF77PublicState->Version,&DCFVersion);
Characters=StrToLong(DCF77PublicState->Version+Characters+1,&DCFRevision);
if(DCFVersion>2 || DCFVersion==2 && DCFRevision>=18)
{
// ...und jetzt auf die ab Version 2.18 vorhandenen Werte.
}
ReleaseSemaphore((struct SignalSemaphore *) DCF77PublicState);
}
else
{
// DCF77 läuft nicht
}
Permit();
Wie Sie sehen, müssen Zugriffe auf eine Semaphore mit Forbid()/Permit()
abgesichert werden. Um das Systemverhalten nicht zu beeinträchtigen,
sollten Sie diesen Vorgang möglichst kurz gestalten; am besten kopieren
Sie benötigte Werte in Hilfsvariablen und werten sie erst nach dem
Permit() aus.
Inzwischen deutet sich an, daß bei zukünftigen Versionen des Amiga-OS der
Mechanismus des Semaphoren-Zugriffs vollkommen geändert werden wird (die
Forbid/Permit-Benutzung ist dann wahrscheinlich generell nicht mehr
zulässig). Diese Änderungen sind wohl bei der Anpassung an den PowerPC-Chip
unvermeidlich. Das könnte zur Folge haben, daß die DCF77-Programme in der
jetzigen Form nicht mehr arbeitsfähig sind. Rechnen Sie also mit dem
Erscheinen neuer Betriebssystemfunktionen für Semaphoren und einem
notwendigen Update der DCF77-Software.
Die oben beschriebene Datenstruktur wird sich aber nicht ändern, sofern
das nicht unvermeidlich ist.